#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<signal.h>
#include<cstdlib>


void handler(int sig)
{
    std::cout<<"get a sig: "<<sig<<std::endl;

}
int main()
{
    //程序崩溃。退出,默认终止进程
    //非法访问，导致os给进程发信号
    //为什么发信号
    //可以不推出，捕捉了异常，推荐终止进程
    //为什么终止
    //signal(SIGFPE,handler);
   //signal(SIGSEGV,handler);

//    int *p=nullptr;
//     *p=100;
   int a=10;
    a/=0;
    while(true)
    {
      std::cout<<"hello world,pid: "<<std::endl;

       
     sleep(1);
    }
}




// int cnt=1;


// void handler(int sig)
// {
//     alarm(1);

//     std::cout<<"cnt: "<<cnt<<"get a sig:"<<sig<<std::endl;

//     //std::cout<<"get a sig: "<<sig<<std::endl;
//     //exit(1);
// }
// int main()
// {
//     //int cnt=1;
//     signal(SIGALRM,handler);
//     alarm(1);

//    // alarm(10);
//     //sleep(4); 
//     //int n=alarm(0);//取消闹钟,上一个闹钟的剩余时间
//     //设定1s后的闹钟--1s---SIGALRM
//    //std::cout<<"n: "<<n<<std::endl;

//    //sleep(10);
//    while(true)
//     {
//         std::cout<<"cnt: "<<cnt<<std::endl;
//         cnt++;
//         sleep(1);
//     }
// }




// void handler(int sig)
// {
//     std::cout<<"get a sig: "<<sig<<std::endl;

// }
// int main()
// {
//     int cnt=0;
//     for(int i=1;i<31;i++)
//        signal(i,handler);
//     //signal(SIGABRT,handler);
//     //signal(3,handler);

//     while(true)
//     {
//         sleep(1);
//         std::cout<<"hello world,pid: "<<getpid()<<std::endl;
        
//         //abort();
//         //raise(3);
//     }
// }


//./mykill 2 1234

// int main(int argc,char *argv[])
// {
//     if(argc!=3)
//     {
//         std::cerr<<"Usage: "<<argv[0]<<" signum pid"<<std::endl;
//         return 1;

//     }


//     pid_t pid=std::stoi(argv[2]);
//     int signum=std::stoi(argv[1]);

//     kill(pid,signum);
// }




// void hander(int sig)
// {
//     std::cout<<"get a sig: "<<sig<<std::endl;

// }

// int main()
// {
//     //对信号的自定义捕捉，只要捕捉一次，后续一直有效
//     //2SIGINT默认是终止进程
//     //ctrl+c   给目标进程发送2号信号

//     //signal(2,hander);
//     signal(3,hander);
//     //signal(4,hander);
//     //signal(5,hander);

//     while(true)
//     {
//         std::cout<<"hello world,pid:"<<getpid()<<std::endl;
//         sleep(1);
//     }
//     return 0;

// }